const rule = {
    card: {
        reg: '^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$',
        bak: '请填写正确的身份证号'
    },
    digit: {
        reg: '^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9][1-9]*[0-9]*))$',
        bak: '请填正数'
    },
    number: {
        reg: '^[1-9]\d*|0$',
        bak: '请填写正整数'
    },
    mobile: {
        reg: '^1(3|4|5|6|7|8|9)\d{9}$',
        bak: '请填写正确的手机号'
    }
}

const regVerify = (type, value) => {
    if (!value) {
        throw new Error('不能为空')
    }
    if (!new RegExp(rule[type]).test(value)) {
        throw new Error(rule[type].bak)
    } else {
        return;
    }
}
const filter = (type, value) => {
    switch (type) {
        case 'duty':
            //只能输入数字字母
            value = value.replace(/[^\w]/g, '');
            return value;
            break;
        case 'charemach*':
            value = value.replace(/[`～ ~!@$%^&()\+=<>?:"{}|,/;'\\[\]·~！@￥%……&（）\+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'charemach':
            // 过滤特殊字符泊位
            value = value.replace(/[`～ *~!@$%^&*()\+=<>?:"{}|,./;'\\[\]·~！@￥%……&*（）\+={}|《》？：“”【】、；‘'，。、]/g, '');

            return value;
            break;
        case 'chareBO':
            // 过滤特殊字符泊位
            value = value.replace(/[`～ *~!$%^&*()_\+=<>?:"{}|,./;'\\[\]·~！@￥%……&*（）——\+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'chareOperation':
            // 过滤特殊字符操作过程
            value = value.replace(/[`～ *~!$%^&*()_\-+=<>?:"{}|,.;'\\[\]·~！@￥%……&*（）——\-+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'char':
            // 过滤特殊字符
            value = value.replace(/[`～ *~!@#$%^&*_\-+=<>?:"{}|,./;'\\[\]·~！@#￥%……&*——\-+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'char1':
            // 过滤特殊字符
            value = value.replace(/[`～ *~!@#$^&*_\-+=<>?:"{}|,/;'\\[\]·~！@#￥……&*——\-+={}|《》？：“”【】；‘'，。]/g, '');
            return value;
            break;
        case 'charPoint':
            // 过滤特殊字符.
            value = value.replace(/[`～ *~!@#$%^&*_\-+=<>?:"{}|,/;'\\[\]·~！@#￥%……&*——\-+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'charSpace':
            // 过滤特殊字符-不包括空格
            value = value.replace(/[`～*~!@#$%^&*_\-+=<>?:"{}|,./;'\\[\]·~！@#￥%……&*——\-+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'char#':
            // 过滤特殊字符
            value = value.replace(/[`～ *~!@#$%^&*()_\+=<>?:"{}|,./;'\\\·~！@#￥%……&*（）\+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'char_':
            // 过滤特殊字符
            value = value.replace(/[`～ *~!@#$%^&*()\+=<>?:"{}|,./;'\\\·~！@#￥%……&*（）\+={}|《》？：“”【】、；‘'，。、]/g, '');
            return value;
            break;
        case 'spaceChar':
            // 过滤特殊字符 包括空格
            value = value.replace(/[`～ *~!@#$%^&*()_\-+=<>?:"{}|,./;'\\[\]·~！@#￥%……&*（）——\-+={}|《》？：“”【】、；‘'，。、 ]/g, '');
            return value;
            break;
        case 'noSpaceChar':
            // 过滤空格
            value = value.replace(/[ ]/g, '');
            return value;
            break;
        case 'chineseOnly':
            // 只能中文输入
            value.replace(/[^\u4E00-\u9FA5]/g, '');
            break;
        case 'number':
            // 只能数字输入
            value = value.replace(/[^0-9]/g, '');
            return value;
            break;
        case 'phone':
            // 只能数字输入
            value = value.replace(/[^0-9|-]/g, '');
            return value;
            break;
        case 'numChinese':
            // 只能输入数字和中文
            value = value.replace(/[^0-9|^\u4E00-\u9FA5]/g, '');
            return value;
            break;
        case 'cardNum':
            // 只能输入身份证数字和xX
            value = value.replace(/[^0-9|x|X]/g, '');
            return value;
            break;
        case 'latin':
            // 只能输入大小写字母下划线
            value = value.replace(/[^a-z|A-Z|0-9|\-|_|\.#]/g, '');
            return value;
            break;
        case 'latinSpace':
            // 只能输入大小写字母下划线空格
            value = value.replace(/[^a-z|A-Z|0-9|\-|_|\.#| ]/g, '');
            return value;
            break;
        // 不能输入小数点
        case 'cangcont':
            value = value.replace(/[^0-9|^]/g, '');
            return value
            break;
        case 'float2':
            value = value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
            return value
            break;
        case 'double':
            //只能输入正负数（小数，整数）
            value = value.replace(/[^(\-?)\d+(\.\d+)?$]/g, '')
            return value
            break;
        case 'digit':
            // 只能输入正数
            value = value.replace(/[^0-9|^\.]/g, '');
            var tmp = value.split('.');
            var first = tmp[0];
            tmp.shift();
            value = tmp.length > 0 ? first + '.' + tmp.join('') : first;
            return value;
            break;
        case 'posInteger':
            // 只能输入正整数
            if (value.length == 1) {
                value = value.replace(/[^1-9]/g, '')
            } else {
                value = value.replace(/\D/g, '')
            }
            return value
            break;
        case 'exactDecimal':
            // 精确到两位小数
            value = value.replace(/[^0-9|^\.]/g, '');
            var tmp = value.split('.');
            var first = tmp[0];
            tmp.shift();
            value = tmp.length > 0 ? first + '.' + tmp.join('').slice(0, 2) : first;
            return value;
            break;
        case 'digitThree':
            // 只能输入正数
            value = value.replace(/[^0-9|^\.]/g, '');
            var tmp = value.split('.');
            var first = tmp[0];
            tmp.shift();
            value = tmp.length > 0 ? first + '.' + tmp.join('').slice(0, 3) : first;
            return value;
            break;
        case 'doubleExactDecimal':
            // 只能输入正负两位小数
            value = value ? value.toString().match(/^[-|\d]\d*(?:\.\d{0,2})?/)[0] : '';
            return value;
            break;
        case 'onlyPoint':
            // 可以输入小数但是只能输入一位小数点
            value = 
                ("" + value) // 第一步：转成字符串
                .replace(/[^\d^\.]+/g, "") // 第二步：把不是数字，不是小数点的过滤掉
                .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
                .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
                .match(/^\d*(\.?\d{0,1})/g)[0] || ""; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到2位小数
            return value
            break;
        case 'twoPoint':
            value = 
            ("" + value) // 第一步：转成字符串
                .replace(/[^\d^\.]+/g, "") // 第二步：把不是数字，不是小数点的过滤掉
                .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
                .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
                .match(/^\d*(\.?\d{0,2})/g)[0] || ""; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到2位小数
            return value
            break
        case 'threePoint':
        value = 
        ("" + value) // 第一步：转成字符串
            .replace(/[^\d^\.]+/g, "") // 第二步：把不是数字，不是小数点的过滤掉
            .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
            .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
            .match(/^\d*(\.?\d{0,3})/g)[0] || ""; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到2位小数
        return value
        break
        case 'fourPoint':
            value = 
            ("" + value) // 第一步：转成字符串
                .replace(/[^\d^\.]+/g, "") // 第二步：把不是数字，不是小数点的过滤掉
                .replace(/^0+(\d)/, "$1") // 第三步：第一位0开头，0后面为数字，则过滤掉，取后面的数字
                .replace(/^\./, "0.") // 第四步：如果输入的第一位为小数点，则替换成 0. 实现自动补全
                .match(/^\d*(\.?\d{0,4})/g)[0] || ""; // 第五步：最终匹配得到结果 以数字开头，只有一个小数点，而且小数点后面只能有0到2位小数
            return value
            break
        default:
            break;
    }
}
var cuHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight

export default {
    regVerify,
    filter,
    cuHeight
}